package capteurs;

import java.util.ArrayList;
import java.util.Observable;

import rails.Rail;
import train.Train;

public class CVitesse extends Capteur{
	private int tmpVitesse;
	
	CVitesse() {
		super();
		tmpVitesse = 0;
	}
	
	CVitesse(Rail rail, int troncon) {
		super(rail, troncon);
		tmpVitesse = 0;
	}
	
	private void notify_all(int vitesse) {
		for(int i=0; i < list.size(); ++i) {
			list.get(i).onVitesseChange(this, vitesse);
		}
	}
	
	public void update(Observable arg0, Object arg1) {
		ArrayList<Train> tListe = rail.getTrains();
		Train tmpTrain;
		
		for(int i=0; i < tListe.size(); ++i) {
			tmpTrain = tListe.get(i);
			if(tmpTrain.getDirection()) {
				if(troncon <= tmpTrain.getCurrPosOnRail() && troncon > tmpTrain.getCurrPosOnRail() - tmpTrain.getSize()) {
					if(!hasTrain) {
						hasTrain = true;
						tmpVitesse = tmpTrain.getCurrentSpeed();
						notify_all(tmpTrain.getCurrentSpeed());
					}
					else if(tmpVitesse != tmpTrain.getCurrentSpeed()) {
							tmpVitesse = tmpTrain.getCurrentSpeed();
							notify_all(tmpTrain.getCurrentSpeed());
					}
					return;
				}
			}
			else {
				if(troncon >= tmpTrain.getCurrPosOnRail() && troncon < tmpTrain.getCurrPosOnRail() + tmpTrain.getSize()) {
					if(!hasTrain) {
						hasTrain = true;
						tmpVitesse = tmpTrain.getCurrentSpeed();
						notify_all(tmpTrain.getCurrentSpeed());
					}
					else if(tmpVitesse != tmpTrain.getCurrentSpeed()) {
							tmpVitesse = tmpTrain.getCurrentSpeed();
							notify_all(tmpTrain.getCurrentSpeed());
					}
					return;
				}
			}
		}
		
		hasTrain = false;
		notify_all(-1);
	}
	
	public String toString() {
		return "Je suis un capteur de vitesse";
	}
}
